4   '   ******************************************

6   '   *** (DFT3.2) GENERATE/ANALYZE WAVEFORM ***

8    '  ******************************************

10 GOSUB 1000

12 PI = 3.141592653589793#: P2 = 2 * PI: K1 = PI / 8: K2 = 1 / PI

14 DIM Y(16), FC(16), FS(16), KC(16), KS(16)

16 CLS : FOR J = 0 TO 16: FC(J) = 0: FS(J) = 0: NEXT

20 GOSUB 108:   ' - PRINT COLUMN HEADINGS

30 GOSUB 120:   ' - GENERATE FUNCTION Y(X)

40 GOSUB 200:   ' - PERFORM DFT

60 GOSUB 140:   ' - PRINT OUT FINAL VALUES

70 PRINT : PRINT "ANY KEY TO CONTINUE";

72 A$ = INKEY$: IF A$ = "" THEN 72

74 GOSUB 300



100   '  ******************************************

102   '  *         PROGRAM SUBROUTINES            *

104   '  ******************************************

106   '  *       PRINT COLUMN HEADINGS            *

107   '  ******************************************

108 PRINT : PRINT

110 PRINT "FREQ    F(COS)      F(SIN)      Y(COS)      Y(SIN)"

112 PRINT

114 RETURN

118   ' ******************************

120   ' *** GENERATE FUNCTION F(X) ***

121   ' ******************************

122 K4 = 3 * K1: KC(1) = COS(K4): KS(1) = SIN(K4) ' SET K4=67.5

124 FOR I = 0 TO 15: K3 = I * K1

126 Y(I) = COS(K3 + K4)

128 NEXT I

130 RETURN

132   ' ******************************

138   ' *       PRINT OUTPUT         *

139   ' ******************************

140 FOR Z = 0 TO 15

142 PRINT Z; "    ";

144 PRINT USING "##.#####_    "; FC(Z); FS(Z); KC(Z); KS(Z)

146 NEXT Z

148 RETURN

200   ' **************************

202   ' *  SOLVE FOR COMPONENTS  *

204   ' **************************

206 FOR J = 0 TO 16:   ' SOLVE EQNS FOR EACH FREQUENCY

208 FOR I = 0 TO 15:   ' MULTIPLY AND SUM EACH DATA POINT

210 FC(J) = FC(J) + Y(I) * COS(J * I * K1): FS(J) = FS(J) + Y(I) * SIN(J * I * K1)

212 NEXT I

214 FC(J) = FC(J) / 16: FS(J) = FS(J) / 16:   ' FIND MEAN VALUE

216 NEXT J

218 RETURN



300 '  *******  DATA DISPLAY  *******

310 CLS : FOR J = 0 TO 16: FC(J) = 0: FS(J) = 0: NEXT

330 GOSUB 120 ' GENERATE FUNCTION Y(X)

332 GOSUB 500 ' PLOT DATA

340 GOSUB 200 ' - PERFORM DFT

360 GOSUB 550 ' - PLOT FINAL VALUES

370 PRINT : PRINT "MORE (Y/N)? ";

372 A$ = INKEY$: IF A$ = "" THEN 372

374 PRINT A$: IF A$ = "Y" THEN 16

380 END



500 ' ***  PLOT DATA  ***

502 SCREEN 9, 1, 1, 1: COLOR 15, 1: CLS

504 LINE (10, 10)-(10, 360)

506 LINE (600, 180)-(10, 180)

510 FOR I = 0 TO 15

512 LINE (37.5 * I + 11, 179 - 50 * Y(I))-(37.5 * I + 11, 179 - 50 * Y(I))

514 NEXT I

516 LOCATE 18, 30: PRINT "TIME DOMAIN WAVEFORM"

518 INPUT "ENTER TO CONTINUE"; A$

549 RETURN



550 ' ***  PLOT DATA  ***

552 SCREEN 9, 1, 1: COLOR 15, 1: CLS

554 LINE (10, 10)-(10, 360)

556 LINE (600, 150)-(10, 150)

560 FOR I = 0 TO 15: Y(I) = SQR(FC(I) ^ 2 + FS(I) ^ 2)

562 LINE (37.5 * I + 11, 150 - 50 * Y(I))-(37.5 * I + 11, 150 - 50 * Y(I))

564 NEXT I

566 LINE (600, 250)-(10, 250)

570 FOR I = 0 TO 15: Y(I) = SQR(KC(I) ^ 2 + KS(I) ^ 2)

572 LINE (37.5 * I + 11, 250 - 50 * Y(I))-(37.5 * I + 11, 250 - 50 * Y(I))

574 NEXT I

576 LOCATE 8, 30: PRINT "TRANSFORM OF DATA"

578 LOCATE 18, 8: PRINT "COMPONENTS USED TO GENERATE INPUT"

580 PRINT

582 INPUT "ENTER TO CONTINUE"; A$

599 RETURN

998  ' *****   TEST INFORMATION   *****

1000 SCREEN 9, 1, 1: COLOR 15, 1: CLS : PRINT : PRINT

1002 PRINT SPC(5); "THIS DEMO GENERATES A SINGLE SINUSOID SHIFTED IN PHASE"

1004 PRINT SPC(5); "BY 67.5 DEGREES.  THE AMPLITUDES OF THE SINE AND COSINE"

1006 PRINT SPC(5); "COMPONENTS ARE SAVED IN AN ARRAY KC(1) AND KS(1).  THE"

1008 PRINT SPC(5); "TRANSFORM IS TAKEN AND THE COMPONENTS COMPARED TO THE "

1010 PRINT SPC(5); "ORIGINAL COMPONENTS USED TO GENERATE THE WAVEFORM.  THIS"

1012 PRINT SPC(5); "PROGRAM ALSO PROVIDES A PLOT OF THE INPUT DATA AND AFTER"

1014 PRINT SPC(5); "THE TRANSFORM IS TAKEN A PLOT OF THE TRANSFORMED DATA AND"

1016 PRINT SPC(5); "ORIGINAL COMPONENTS IS GIVEN.": PRINT

1018 INPUT "ENTER TO CONTINUE"; A$

1020 RETURN



